Coffee School Game Lesson Three - Using Game States
Code Editor
// Creating environment variables
var playerSize = 10;
var sceneWidth = 300, sceneHeight = 150;
var groundHeight = 10;
var playAreaHeight = (sceneHeight - groundHeight);
// Create the variables to track player movement
var playerVel = 0; // Stores the player's velocity
var g = 0.4; // The constant acceleration cause by "gravity"
// Object width!
var objectWidth = 2 * playerSize;
// Obstacle Counter
var obstacleCounter = 0;
// Sets the background colour
Crafty.background("#ADD8E6");
// Create the ground!
Crafty.e("Solid, 2D, DOM, Color")
.attr({x: 0,
y: playAreaHeight,
w: sceneWidth,
h: groundHeight})
.color("#00ff00");
// Create our player's base entity
Crafty.e("Collision, 2D, DOM, Color") // Specifying the components to add
.attr({x: 30, y: 30, w: playerSize, h: playerSize}) // Specifying the dimensions and the point to draw from
.checkHits("Solid")
.color("#ff0000") // Specifying the colour of the rectangle
.bind("EnterFrame", function() { // Binds the "EnterFrame" event to the entity
if(this.y < 0) {
playerVel = g; // Prevent the player from going above the game screen
}
else {
playerVel += g; // Adds the "gravitational acceleration" to the player's velocity
}
this.y += playerVel; // Change the player entities y position based on the player velocity
})
.bind("KeyDown", function(event) { // Binds the "KeyDown" event to our player entity
if(event.key == Crafty.keys.SPACE){ // If the key is the spacebar then "flap"
playerVel = -5; // Sets the player's speed and direction to go upwards
}
})
.bind("HitOn", function() {
Crafty.pause();
})
.bind("EnterFrame", function() {
Crafty("Obstacle").each(function() {
if(this.x < -objectWidth) {
this.destroy();
}
else {
this.x -= 3;
}
});
if(obstacleCounter > 100){
obstacleCounter = 0;
newObstacle();
}
obstacleCounter++;
});
function newObstacle()
{
var randomHeight = Math.floor((Math.random() * (sceneHeight/2)) + (sceneHeight/3));
var bottomOfTopHalf = playAreaHeight - randomHeight;
var topOfBottomHalf = bottomOfTopHalf + (4 * playerSize);
// Create the top half of the pipe
Crafty.e("Obstacle, 2D, DOM, Color, Solid")
.attr({x: sceneWidth,
y: 0,
w: objectWidth,
h: bottomOfTopHalf})
.color("#003319");
// Create the bottom half of the pipe
Crafty.e("Obstacle, 2D, DOM, Color, Solid")
.attr({x: sceneWidth,
y: topOfBottomHalf,
w: objectWidth,
h: playAreaHeight - topOfBottomHalf})
.color("#003319");
}
Preview
Console Log:
Game Lesson Three - Using Game States
Now that we have the core of our game working, it would be nice to have a start screen and a game over screen. To do this in Crafty we can have different “Scenes” to represent different game states.
If we want to have our game, a start screen and a game over screen we can define three different states of the game using Crafty’s Scene
functionality. One “Start” scene, one “GameOver” scene and a “Game” scene.
When we create these scenes we will wrap them around the code which we want to run during each scene. So let’s get started!